<?php

namespace app\service\middleware;

/**
 *  JWT 中间件
 */

use app\Request;
use Closure;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use think\facade\Config;


class Token
{
    /**
     * 验证token 验证权限 并记录操作日志
     * @param Request $request
     * @param Closure $next
     * @return mixed|void
     */
    public function handle(Request $request, Closure $next)
    {
        $jwtToken = $request->header('token'); // 获取JWT Token
        if (!$jwtToken) die(json_encode(['code' => 401, 'msg' => '未授权的API请求！'], JSON_UNESCAPED_UNICODE));
        try {
            $name = app('http')->getName();
            $key = Config::get('jwt.'.$name.'.key');
            $jwtInfo = (array)JWT::decode($jwtToken, new Key($key, 'HS256')); // 使用JWT解密Token
            $request->user_id = $jwtInfo['sub']; // 将解密后的JWT信息存储在请求对象中，后续控制器可以使用
        } catch (\Exception $e) {
            die(json_encode(['code' => 401, 'msg' => "token已过期"], JSON_UNESCAPED_UNICODE));
        }
        return $next($request); // 继续后续请求处理
    }
}